import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

import 'main.dart';

const disclaimerText1 =
    '\r\r\r\r\r\r本APP属于个人的非赢利性开源项目，以供开源社区使用，凡本APP转载的所有的文章 、图片、音频、视频文件等资料的版权归版权所有人所有，本APP采用的非本站原创文章及图片等内容无法一一和版权者联系，如果本网所选内容的文章作者及编辑认为其作品不宜上网供大家浏览，或不应无偿使用请及时用电子邮件或电话通知我们，以迅速采取适当措施，避免给双方造成不必要的经济损失。';
const disclaimerText2 =
    '\n\r\r\r\r\r\r对于已经授权本APP独家使用并提供给本站资料的版权所有人的文章、图片等资料，如需转载使用，需取得本站和版权所有人的同意。本APP所刊发、转载的文章，其版权均归原作者所有，如其他媒体、网站或个人从本网下载使用，请在转载有关文章时务必尊重该文章的著作权，保留本网注明的“稿件来源”，并自负版权等法律责任。';

class DisclaimerMsg extends StatefulWidget {
  const DisclaimerMsg({Key key, this.state}) : super(key: key);
  final State state;
  @override
  DisclaimerMsgState createState() => DisclaimerMsgState();
}

class DisclaimerMsgState extends State<DisclaimerMsg> {
  final _prefs = SharedPreferences.getInstance();
  Future<bool> _unknow;
  bool _valBool = false;
  bool _readed = false;
  @override
  void initState() {
    // 获取偏好设置结果
    _unknow = _prefs.then((SharedPreferences prefs) {
      return (prefs.getBool(dialogPrefKey) ?? false);
    });
    _unknow.then((bool onValue) {
      _valBool = onValue;
      _readed = onValue;
    });
    super.initState();
  }

  // 存储设置偏好
  void _refs(bool value) async {
    final SharedPreferences prefs = await _prefs;
    final bool unknow = value;
    if (mounted) {
      setState(() {
        _unknow = prefs.setBool(dialogPrefKey, unknow).then((bool success) {
          return unknow;
        });
      });
    }
  }

  Future<void> showAlertDialog(BuildContext context) {
    return showDialog<void>(
      context: context,
      barrierDismissible: false,
      builder: (BuildContext context) {
        return AlertDialog(
          content: SingleChildScrollView(
            child: ListBody(
              children: <Widget>[
                Text(disclaimerText1),
                Text(disclaimerText2),
              ],
            ),
          ),
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(20.0),
          ),
          actions: <Widget>[
            Container(
              width: 250.0,
              child: _create(),
            )
          ],
        );
      },
    );
  }

  Row _create() {
    if (_readed) {
      return Row(
        mainAxisAlignment: MainAxisAlignment.end,
        children: <Widget>[
          FlatButton(
            padding: EdgeInsets.symmetric(horizontal: 20.0),
            child: Text(
              '已阅读知晓',
              style: TextStyle(fontSize: 16, color: Colors.white),
            ),
            color: Theme.of(context).primaryColor,
            onPressed: () {
              Navigator.of(context).pop();
            },
          ),
          SizedBox(width: 10.0),
        ],
      );
    }
    return Row(
      mainAxisAlignment: MainAxisAlignment.spaceAround,
      children: <Widget>[
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Checkbox(
              activeColor: Theme.of(context).primaryColor,
              tristate: false,
              value: _valBool,
              onChanged: (bool value) {
                if (mounted) {
                  setState(() => _valBool = value);
                }
                Navigator.of(context).pop();
                showAlertDialog(context);
              },
            ),
            Text('不再自动提示')
          ],
        ),
        FlatButton(
          child: Text(
            '知道了',
            style: TextStyle(fontSize: 16, color: Colors.white),
          ),
          color: _valBool
              ? Theme.of(context).primaryColor
              : Theme.of(context).primaryColor.withAlpha(800),
          onPressed: () {
            _refs(_valBool);
            Navigator.of(context).pop();
          },
        )
      ],
    );
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: RaisedButton(
        onPressed: () => showAlertDialog(context),
        child: Text('弹出'),
      ),
    );
  }
}
